
/*
 * Desenvolvimento para WEB
 * 
 * NOME: Vitor Augusto Graciani           RA: 345270
 * NOME: Felipe Petruz Brina              RA: 345083
 * NOME: Diego Zamboni Latance            RA: 344990
 * NOME: Rafael Claudio Domene            RA: 345040
 * NOME: Vinicius Rodrigues de Campos     RA: 345350
 * 
 */
package model;

import auxiliar.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.ArrayList;

public class ConsultaEntidadeAbsolutaDAO {

    private Connection conn;

    public ConsultaEntidadeAbsolutaDAO() throws DAOException {
        try {
            this.conn = ConnectionFactory.getConnection();

        } catch (Exception e) {
            throw new DAOException("Erro: " + ":\n" + e.getMessage());
        }
    }

    //Cadastro da entidade no BD
    public void cadastroEntidade(EntidadeBEAN entidade) throws DAOException {
        PreparedStatement ps = null;
        Connection conn = null;
        if (entidade == null) {
            throw new DAOException("Entidade nao pode ser vazia");
        }
        try {

            //Atributos usados na String SQL para cadastro
            String displayname = entidade.getDisplayName();
            String wikikey = entidade.getWikikeys();
            String descricao = entidade.getDescricao();
            String tipo = entidade.getTipo();
            String categoria = entidade.getCategoria();

            String SQL = "EXECUTE insereEntidade '"+displayname+"', '"+descricao+"', '"+tipo+"', '"+categoria+"', '"+wikikey+"'";//Acrescentar SQL *************************************************************
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.executeUpdate();
        } catch (SQLException sqle) {
            throw new DAOException("Erros ao inserir dados: ");
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    // consulta entidade do banco
    public EntidadeBEAN consultaAbsoluta(String entidadeAbsoluta) throws DAOException {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        EntidadeBEAN novo = null;
        try {

            String SQL = "EXECUTE consultaEntidade '" + entidadeAbsoluta + "'";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            rs = ps.executeQuery();
            rs.next();
            int mid = Integer.parseInt(rs.getObject("mid").toString());
            String displayname = rs.getObject("displayname").toString();
            String descricao = rs.getObject("description").toString();
            String wikikey = rs.getObject("wikikey").toString();
            String categoria = rs.getObject("categorie").toString();
            String tipo = rs.getObject("type").toString();
            

            novo = new EntidadeBEAN(displayname, wikikey, descricao, categoria, tipo, mid);

            return novo;
        } catch (SQLException sqle) {
            throw new DAOException(sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }

    public void alteraEntidade(EntidadeBEAN alteraEntidade) throws DAOException {
        PreparedStatement ps = null;
        Connection conn = null;
        if (alteraEntidade == null) {
            throw new DAOException("Entidade nao pode ser vazia");
        }
        try {

            //Atributos usados na String SQL para alteracao
            String displayname = alteraEntidade.getDisplayName();
            String wikikey = alteraEntidade.getWikikeys();
            String descricao = alteraEntidade.getDescricao();
            String categoria = alteraEntidade.getCategoria();
            String tipo = alteraEntidade.getTipo();

            String SQL = "";//Acrescentar SQL (dica: ALTER TABLE) *******************************************
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.executeUpdate();
        } catch (SQLException sqle) {
            throw new DAOException("Erros ao inserir dados: " + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    public void removeEntidade(int mid) throws DAOException {

        PreparedStatement ps = null;
        Connection conn = null;
        if (mid == 0) {
            throw new DAOException("Entidade nao pode ser vazia");
        }
        try {


            String SQL = "EXECUTE deletaEntidade " + mid;
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.executeUpdate();
        } catch (SQLException sqle) {
            throw new DAOException("Erros ao inserir dados: " + sqle);
        } finally {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }
}
